18870번 좌표 압축

Day16 13단계 20231110

번호 메모리 처리 시간 길이 자료형 정렬용 배열
1 ? ? 727 B Long Long[], Arrays.sort()
2 283592 KB 3004 ms 870 B Long Long[], Arrays.sort()
3 271968 KB 3096 ms 905 B Long arr[i] = arr2[i], Arrays.sort()
4 275984 KB 2292 ms 1120 B Long TreeSet<Long>()
5 278028 KB 2020 ms 1196 B int, Integer TreeSet<Long>()
6 294288 KB 2032 ms 934 B int, Integer int[], Arrays.sort()

1. 처음 시도한 코드

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        String[] nums = br.readLine().split(" ");
        Long[] arr = new Long[n];
        for (int i = 0; i < n; i++) {
        	arr[i] = Long.parseLong(nums[i]);
        }
		Arrays.sort(arr);
		
		StringBuilder sb = new StringBuilder();
		int count = 0;
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n - 1; j++) {
				if (Long.parseLong(nums[i]) > arr[j] && !arr[j].equals(arr[j+1])) {
					count++;
				}
			}
			sb.append(count+" ");
			count = 0;
		}

		System.out.println(sb.toString());
		br.close();
	}
}

2. 1차 수정 코드

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
        // reference : https://st-lab.tistory.com/279
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		Long[] arr = new Long[n];
		for (int i = 0; i < n; i++) {
			arr[i] = Long.parseLong(st.nextToken());
		}
		Long[] arr2 = Arrays.copyOf(arr, arr.length);
		Arrays.sort(arr2);
		
		Map<Long, Integer> map = new HashMap<>();
		int rank = 0;
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(arr2[i]))
				map.put(arr2[i], rank++);
		}
		
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < n; i++) {
			sb.append(map.get(arr[i])+" ");
		}

		System.out.println(sb.toString());
		br.close();
	}
}

3. 2차 수정 코드

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
        // reference : https://st-lab.tistory.com/279
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		Long[] arr = new Long[n];
		Long[] arr2 = new Long[n]; // 1차 수정 비교
		for (int i = 0; i < n; i++) {
			arr[i] = arr2[i] = Long.parseLong(st.nextToken()); // 1차 수정 비교
		}
		Arrays.sort(arr2);
		
		Map<Long, Integer> map = new HashMap<>();
		int rank = 0;
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(arr2[i]))
				map.put(arr2[i], rank++);
		}
		
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < n; i++) {
			sb.append(map.get(arr[i])+" ");
		}

		System.out.println(sb.toString());
		br.close();
	}
}

4. 3차 수정 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        // reference : https://st-lab.tistory.com/279
        // 챗gpt로 이전 코드를 수정한 결과 테스트
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        Long[] arr = new Long[n];

        TreeSet<Long> set = new TreeSet<>(); // 2차 수정(챗gpt)
        for (int i = 0; i < n; i++) {
            arr[i] = Long.parseLong(st.nextToken());
            set.add(arr[i]); // 2차 수정(챗gpt)
        }

        Map<Long, Integer> map = new HashMap<>();
        int rank = 0;
        for (long value : set) { // 2차 수정(챗gpt)
            map.put(value, rank++);
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(map.get(arr[i])).append(" "); // 2차 수정(챗gpt)
        }

        System.out.println(sb.toString());
        br.close();
    }
}

5. 4차 수정 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        // referecne : https://st-lab.tistory.com/279
        // 챗gpt로 이전 코드를 수정한 결과 테스트
        // 자료형을 Long -> int로 바꿈
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int[] arr = new int[n]; // 3차 수정 테스트

        TreeSet<Integer> set = new TreeSet<>(); // 3차 수정 테스트

        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken()); // 3차 수정 테스트
            set.add(arr[i]);
        }

        Map<Integer, Integer> map = new HashMap<>(); // 3차 수정 테스트
        int rank = 0;

        for (int i : set) { // 3차 수정 테스트
            map.put(i, rank++);
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(map.get(arr[i])).append(" ");
        }

        System.out.println(sb.toString());
        br.close();
    }
}

6. 5차 수정 코드

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
        // reference : https://st-lab.tistory.com/279
		// 69101244 제출에서 자료형을 Long -> int로 바꿈
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int[] arr = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		int[] arr2 = Arrays.copyOf(arr, arr.length);
		Arrays.sort(arr2);
		
		Map<Integer, Integer> map = new HashMap<>();
		int rank = 0;
		for (int i = 0; i < n; i++) {
			if (!map.containsKey(arr2[i]))
				map.put(arr2[i], rank++);
		}
		
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < n; i++) {
			sb.append(map.get(arr[i])+" ");
		}

		System.out.println(sb.toString());
		br.close();
	}
}